package org.seedltd.upms.service.detection;

import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.seedltd.core.base.BasePage;
import org.seedltd.core.base.IBaseService;
import org.seedltd.upms.model.detection.entity.DetectionTerminal;
import org.seedltd.upms.model.detection.form.DetectionTerminalForm;
import org.seedltd.upms.model.detection.form.DetectionTerminalSearchForm;
import org.seedltd.upms.model.detection.vo.DetectionTerminalVO;

import com.google.zxing.WriterException;

/**
 * 终端管理业务接口
 * 
 * @author laizuan
 * @since 2021/07/28
 * @version 1.0
 */
public interface DetectionTerminalService extends IBaseService<DetectionTerminal> {

    /**
     * 通过主键获取数据
     *
     * @param id
     *            主键
     * @return 数据
     */
    DetectionTerminalVO findById(Long id);

    /**
     * 通过主键获取数据
     *
     * @param codeNo
     *            二维码编号
     * @param type
     *            1回收箱，0贩卖机
     * @return 数据
     */
    DetectionTerminal findByCodeNo(String codeNo, Integer type);

    /**
     * 新增数据
     *
     * @param form
     *            表单数据
     * @return 主键
     */
    Long add(DetectionTerminalForm form) throws IOException, WriterException;

    /**
     * 修改数据
     *
     * @param form
     *            表单数据
     * @return 是否修改成功。 true: 成功，false:失败
     */
    boolean update(DetectionTerminalForm form);

    /**
     * 删除数据
     *
     * @param id
     *            主键
     * @return 是否删除成功。 true: 成功，false:失败
     */
    boolean delete(Long id);

    /**
     * 刷新二维码
     * 
     * @param id
     *            主键
     * @return
     */
    boolean refreshQrCode(Long id) throws IOException, WriterException;

    /**
     * 下载二维码
     * 
     * @param response
     *            响应流
     * @param id
     *            主键
     * @param isPreview
     *            是否预览
     * @return
     */
    void downloadQrCode(HttpServletResponse response, Long id, boolean isPreview) throws IOException;

    /**
     * 列表查询
     * 
     * @param searchForm
     *            搜索条件
     * @return 列表数据
     */
    BasePage<DetectionTerminalVO> page(DetectionTerminalSearchForm searchForm);

    /**
     * 获取有效的售卖机集合
     * 
     * @param page
     *            分页
     * @return 有效的售卖机集合
     */
    List<DetectionTerminal> listVm(BasePage<DetectionTerminal> page);

    /**
     * 从惠逸捷获取最新的货道数据
     * 
     * @param id
     *            主键
     * @return
     */
    boolean updatePipeline(Long id);

}